<?php
/*
 * 基础类 测试重构使用
 * @package    module
 * @author     Mark
 * @copyright  Copyright (c) 2013 ixdcw team
 * @version    $Id: e12879a6f72336f7dda513e9253dd70cf3d9f03c $
 */

/**
 * 基本模块
 * Class BasicModule
 */
class BasicModule {

	/** @var  基础的分页类 */
	protected $_pn;

	/** @var  数据库类 */
	protected $_db;

	/** @var int 分页 */
	protected $_pagesize;

	/** @var string 错误信息 */
	protected $_errmsg = errmsg;

	/**
	 * 构造函数, 初始化数据库, 加入分页类
	 */
	public function __construct() {
		global $db;
		$this->_db = & $db;
		$this->_pn = new Pagination();
		$this->_pn->padding(false);
		$this->_pagesize = 20;
	}

	/**
	 * 设置分页数量
	 * @param $pagesize
	 */
	public function setPagesize($pagesize) {
		$this->_pagesize = $pagesize;
	}

	/**
	 * 获取分页类实例
	 * @return Pagination
	 */
	public function getPn() {
		return $this->_pn;
	}

	/**
	 * 获取错误信息
	 * @return string
	 */
	public function getErrmsg() {
		return $this->_errmsg;
	}

	/**
	 * 获取类别
	 * @param $catid
	 * @return array|null
	 */
	public function getCat($catid) {
		$catid = intval($catid);
		return $catid ? $this->_db->getOne("SELECT * FROM {$this->_db->pre}category WHERE catid=$catid") : array();
	}

	/**
	 * 内容页分页重写
	 * @param $content 内容
	 * @param $subtitle 子标题
	 * @param $title 标题
	 * @return array
	 */
	public function contentPage($content, $subtitle, $title) {
		//子标题集合
		$titles = array();

		if ($subtitle) {
			$titles = explode("\n", $subtitle);
			$titles = array_map('trim', $titles);
			foreach ($titles as $key => $titlePart) {
				$titles['page-' . ($key + 1)] = $titlePart;
                unset($titles[$key]);//清除当前下标自身原有的元素
			}
		}
        //需要查找的分页符标记
		$pagebreak = "<hr style=\"page-break-after:always;\" class=\"ke-pagebreak\" />";
		$contents = array();
		if (strpos($content, $pagebreak) !== false) {
            //根据标记分割成数组
			$contents = explode($pagebreak, $content);
			foreach ($contents as $key => $contentPart) {
				$contents['page-' . ($key + 1)] = $contentPart;
				unset($contents[$key]);
			}
		}
        //all存储文章全部内容
		$contents['all'] = $contents ? implode('', $contents) : $content;

        $countContent = count($contents)-1;
        $countTitles  = count($titles);
        //内容分页数量比子标题多。
        if ($countContent > $countTitles) {
            for ($i = 1; $i <= $countContent; $i++) {
                //将缺少 子标题的内容分页设置成 标题+第页
                if (!isset($titles['page-' . $i])) {
                    $titles['page-' . $i] = $title . "第({$i})页";
                }
            }
        }
        //删除多余的内容分页
        if ($countTitles > $countContent) {
            for ($i = 1; $i <= $countTitles; $i++) {
                if ($i>$countContent) {
                    unset($titles['page-' . $i]);
                }
            }
        }
		//封装成数组返回
		$info = array();
		$info['contents'] = $contents;
		$info['titles']  = $titles;
		return $info;
	}

	/**
	 * 设置错误信息
	 * @param $err
	 * @return bool
	 */
	protected function err($err) {
		$this->_errmsg = $err;
		return false;
	}

	/**
	 * Ajax方式返回数据到客户端
	 * @access protected
	 * @param mixed $data 要返回的数据
	 * @param String $type AJAX返回数据格式
	 * @return void
	 */
	public function ajaxReturn($data,$type='JSON') {
		if(func_num_args()>2) {// 兼容3.0之前用法
			$args           =   func_get_args();
			array_shift($args);
			$info           =   array();
			$info['data']   =   $data;
			$info['info']   =   array_shift($args);
			$info['status'] =   array_shift($args);
			$data           =   $info;
			$type           =   $args?array_shift($args):'';
		}
		switch (strtoupper($type)){
			case 'JSON' :
				// 返回JSON数据格式到客户端 包含状态信息
				header('Content-Type:application/json; charset=utf-8');
				exit(json_encode($data));
			case 'XML'  :
				// 返回xml格式数据
				header('Content-Type:text/xml; charset=utf-8');
				exit(xml_encode($data));
			case 'JSONP':
				// 返回JSON数据格式到客户端 包含状态信息
				header('Content-Type:application/json; charset=utf-8');
				$handler  =   isset($_GET[C('VAR_JSONP_HANDLER')]) ? $_GET[C('VAR_JSONP_HANDLER')] : C('DEFAULT_JSONP_HANDLER');
				exit($handler.'('.json_encode($data).');');
			case 'EVAL' :
				// 返回可执行的js脚本
				header('Content-Type:text/html; charset=utf-8');
				exit($data);
		}
	}
}
